#ifndef GAMEFRAMEWORK_H
#define GAMEFRAMEWORK_H

#include <QMainWindow>
#include<QDebug>
#include<fstream>
#include<iostream>
#include<QShortcut>
#include<QFormLayout>
#include<QButtonGroup>
#include<QLineEdit>
#include<QTimer>
#include<windows.h>
#include<QPushButton>
#include<QToolTip>
#include<QDockWidget>
#include<QDialog>
#include<QPushButton>
#include<QStatusBar>
#include<QToolBar>
#include<QPair>
#include<QCursor>
#include<QVector>
#include<QPair>
#include<QLabel>
#include<QMap>
#include<QMessageBox>
#include<QColorDialog>
#include<QFileDialog>
#include<QFontDialog>
#include<QTimer>
#include<QInputDialog>
#include<QFile>
#include<random>
#include<windows.h>
#include<QFileDevice>
#include<QWaitCondition>
#include<Qpainter>
#include<QPaintEvent>
#include"plant.h"
#include"zom.h"
#include"sunshine.h"
#include"zom.h"
#include"bullet.h"
QT_BEGIN_NAMESPACE
namespace Ui { class gameframework; }
QT_END_NAMESPACE

class gameframework : public QMainWindow
{
    Q_OBJECT

public:
    QLabel* label_shoot_update;
    QLabel* label_bullet_update;
    QLabel* label_sunnum;
    QTimer* timer_update;
    QVector<QVector<plant*>> plants;  //使用二维数组管理场上植物
    QVector<QVector<zom>> zoms;   //使用一维数组管理场上僵尸
    QVector<bullet> bullets  ; //使用一维数组管理场上子弹
    QVector<sunshine> collect_sun ;   //使用一维数组管理阳光收集
    int sun_des_x;  //阳光飞行重点x坐标
    int sun_des_y;
    int sum_sunnum=100;  //阳光总数
    int add_life=0;     //后续僵尸血量随时间流逝而上升
    int time;    //记录当前闯关时间
    int row=1;  //射手默认位置
    int col=0;
    int update_shoot=200;
    int update_bullet=175;
    int update_shoot1=200;  //升级射手所需阳光数
    int update_shoot2=400;
    int update_bullet1=175; //升级子弹所需阳光数
    int update_bullet2=350;
    int bullet_speed=40;    //子弹的飞行速度
    int bullet_type=1;  //1:pea 2:snowpea 3:firepea
    int bullet_fre=280; //发射间隔
    int bullet_pre=0;
    int bullet_attack=300;
    int shoot_level=1;   //当前射手等级
    int bullet_level=1;   //当前子弹等级
    int update_fre=75;
    int zom_fre=3000;
    int zom_pre=0;
    bool fire_statue=false;

    int bullet_num=1;
    int fire_fre=100;
    int fire_pre=0;
    long long game_time=0;

    int stage=1;     //游戏阶段  1: normal 2: middle 3:difficult
    int select_plant_type;

    bool select_plant=false;
public:

public:
    gameframework(QWidget *parent = nullptr);
    ~gameframework();
public:
    void Paint(QPainter* pa,QPixmap& pm,QString str,int x,int y,int w,int h);
    void InitElement();
    void InitGraph(QPainter* pa,QPixmap& pm);   //初始化界面
    void ObserveBullet(QPainter* pa,QPixmap& pm);
    void MakeBullet();
    void MakeZom();
    void ObserveZom(QPainter* pa,QPixmap& pm);
    void ObservePlant(QPainter* pa,QPixmap& pm);
    void ObserveSunshine(QPainter* pa,QPixmap& pm);
public:
    void paintEvent(QPaintEvent* pe)override;
    void keyPressEvent(QKeyEvent* ke)override;
    void mousePressEvent(QMouseEvent* me)override;
private:
    Ui::gameframework *ui;
};
#endif // GAMEFRAMEWORK_H
